// package grpcclientdemo

package main

import (
	"context"
	"fmt"

	// _ "gPublic/grpc/pubData/go"

	pb "gPublic/grpc/yz-pub-data/pubData"

	"google.golang.org/grpc"
	// "google.golang.org/grpc/credentials"	// 安全验证 1 安装包
	"google.golang.org/grpc/credentials/insecure"
)

// 在定义借rpc验证借接口	-	安全连接 通过ssh 生成密钥
type ClientTokenAuth struct { // 安全验证 2 在定义调用接口
}

// 这俩个方法 是grpc里面的包："google.golang.org/credentials" 在这重构 这里面的方法
// 安全验证 3 实现接口
func (c ClientTokenAuth) GetRequestMetadata(cxt context.Context, uri ...string) (map[string]string, error) {

	return map[string]string{ // 用于服务端验证数据
		"appId":  "123456",
		"appKey": "kkkey",
	}, nil
}

// 安全验证 4 实现接口  是grpc里面的包："google.golang.org/credentials" 	在这重构 这里面的方法
func (c ClientTokenAuth) RequireTransportSecurity() bool {

	return false // 返回true 要开启ssl/tls 认证
}

// 引用protoc生成的go package
// func TestGrpcDemo() {
func main22() {
	var opts []grpc.DialOption
	opts = append(opts, grpc.WithTransportCredentials(insecure.NewCredentials()))
	opts = append(opts, grpc.WithPerRPCCredentials(new(ClientTokenAuth))) // 带上验证消息
	conn, err := grpc.Dial("127.0.0.1:5904", opts...)

	// 链接demo端 【非安全】
	// conn, err := grpc.Dial("47.117.156.51:5904", grpc.WithTransportCredentials(insecure.NewCredentials()))
	// conn, err := grpc.Dial("127.0.0.1:5904", grpc.WithTransportCredentials(insecure.NewCredentials()))

	if err != nil {
		fmt.Printf("did connect fail: %v", err)
	}

	// 关闭连接
	defer conn.Close()

	// 建立远程连接
	client := pb.NewPbuDataClient(conn)

	// 调用远程连接调用方法		【一个服务中的俩个方法】
	res, err := client.GetPubData(context.Background(), &pb.PubRequest{Id: 22})
	// res2, _ := client.GetTest(context.Background(), &pb.TestRequest{Id: 22})

	fmt.Println(err)
	// fmt.Println(res2.GetName())
	fmt.Println(res.GetPubMenu())
}
